/**
 * 
 */
package kr.pe.johnkim.dayve.provider;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

/**
 * @author johnkim
 *
 */
public class DayveGroupDatabaseHandler {

	public static final String TAG = DayveGroupDatabaseHandler.class.getSimpleName();
	
	Context ctx;
	DayveGroupDatabaseHelper helper;
	SQLiteDatabase db;
	
	public DayveGroupDatabaseHandler(Context ctx) {
		this.ctx = ctx;
		
		helper = new DayveGroupDatabaseHelper(ctx);		
		
		db = helper.getWritableDatabase();
	}
	
	/**
	 * Database open 
	 */	
    public static DayveGroupDatabaseHandler open(Context ctx) {
    	return new DayveGroupDatabaseHandler(ctx);
    }
    
    /**
     * Transaction 을 정의 한다.
     */
	public void beginTransaction() {db.beginTransaction();}
	
	public void setTransactionSuccessful() {db.setTransactionSuccessful();}
	
	public void endTransaction() {db.endTransaction();}

	public SQLiteDatabase getSQLiteDatabase() {
		return this.db;
	}
	
	/**
	 * Database close 
	 * */
	public void close() {
		if(db.isOpen()) db.close();
	}

	// Group 테이블 컬럼 목록.
	private static final String[] DAYVE_GROUP = new String[] {
		"_id", 
		"id_myhistory_groups",
		"name",
		"comment", 
		"icon_url", 
		"open_group_yn",
		"favorite_yn",
		"activate_yn",
		"modify_date",
		"register_date",
		"myhistory_members_id"
	};

	/**
	 * 그룹 목록을 가져 온다.
	 * 
	 * @param _id
	 * @param limit
	 * @return
	 */
	public ArrayList<DayveGroup> selectGroupList(String _id, String limit) {
		Log.i(TAG, "selectGroupList");
		
		ArrayList<DayveGroup> groupList = new ArrayList<DayveGroup>();
		
		Cursor cursor = db.query(
				"dayve_group", 
				DAYVE_GROUP, 
				"_id>?", 
				new String[] {_id}, 
				null, 
				null, 
				" _id ASC ", 
				limit
				);
		
		DayveGroup dayveGroup = null;
		
		while(cursor.moveToNext()) {
			dayveGroup = new DayveGroup();
			
			dayveGroup.set_id(cursor.getString(0));
			dayveGroup.setIdMyHistoryGroups(cursor.getString(1));
			dayveGroup.setName(cursor.getString(2));
			dayveGroup.setComment(cursor.getString(3));
			dayveGroup.setIconUrl(cursor.getString(4));
			dayveGroup.setOpenGroupYn(cursor.getString(5));
			dayveGroup.setFavoriteYn(cursor.getString(6));
			dayveGroup.setActivateYn(cursor.getString(7));
			dayveGroup.setModifyDate(cursor.getString(8));
			dayveGroup.setRegisterDate(cursor.getString(9));
			dayveGroup.setMyHistoryMembersId(cursor.getString(10));
			
//			Log.i(TAG, "_id       : " + dayveGroup.get_id());
//			Log.i(TAG, "id        : " + dayveGroup.getIdMyHistoryGroups());
//			Log.i(TAG, "name      : " + dayveGroup.getName());
//			Log.i(TAG, "comment   : " + dayveGroup.getComment());
//			Log.i(TAG, "image url : " + dayveGroup.getIconUrl());
			
			groupList.add(dayveGroup);
		}
		
		cursor.close();
		
		return groupList;
	}
	
	/**
	 * Group 내용을 가져 온다.
	 * 
	 * @param groupId
	 * @return
	 */
	public DayveGroup selectGroup(String groupId) {
		Log.i(TAG, "selectGroup");
		
		DayveGroup dayveGroup = new DayveGroup();
		
		Cursor cursor = db.query(
				"dayve_group", 							// 테이블.
				DAYVE_GROUP, 							// 컬럼.
				"id_myhistory_groups = ?", 				// 조건문.
				new String[] {groupId}, 		// 조건값.
				null, 
				null, 
				null
				);
		
		/**
		 * 현재, 페이징 처리와 한번에 가져 오는 로직이 섞여 있어서 
		 * 같은 데이터들이 중복으로 들어 있기때문에 같은 데이터의 첫번째 결과만 
		 * 가져 오도록 cursor.moveToFirst() 정의 함.
		 * 
		 * 추후 한번에 가져 오는 로직으로 모두 수정될 경우 삭제 하면 된다.
		 */
		cursor.moveToFirst();
		
		dayveGroup.set_id(cursor.getString(0));
		dayveGroup.setIdMyHistoryGroups(cursor.getString(1));
		dayveGroup.setName(cursor.getString(2));
		dayveGroup.setComment(cursor.getString(3));
		dayveGroup.setIconUrl(cursor.getString(4));
		dayveGroup.setOpenGroupYn(cursor.getString(5));
		dayveGroup.setFavoriteYn(cursor.getString(6));
		dayveGroup.setActivateYn(cursor.getString(7));
		dayveGroup.setModifyDate(cursor.getString(8));
		dayveGroup.setRegisterDate(cursor.getString(9));
		dayveGroup.setMyHistoryMembersId(cursor.getString(10));
		
		cursor.close();
		
		return dayveGroup;
	}
	
	/**
	 * 그룹을 저장 한다.
	 * 
	 * @param values
	 * @return
	 */
	public Long insertDayveGroup(ContentValues values) {
//		Log.i(TAG, "insertDayveGroup");
		return  db.insert("dayve_group", "", values);
	}
	
	/**
	 * 그룹을 삭제 한다.
	 * 
	 * @return
	 */
	public int deleteDayveGroup() {
		Log.i(TAG, "deleteDayveGroup");
		return db.delete("dayve_group", null, null);
	}
}
